﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using SSPharma.Common;
using System.Data;
using SSPharma.Biz.DanhMuc;
namespace SSPharma.View.DanhMuc
{
    /// <summary>
    /// Interaction logic for frmKhoanMuc.xaml
    /// </summary>
    public partial class frmKhoanMuc : Window
    {

        #region valible
        //dataset dung de luu  dữ liệu xuống database
        private DataSet dsData;
        // enum dùng để lưu trữ trạng thái mode form
        private UtilityUIElement.FormMode isMode;
        // khai báo đối tượng BizDanhMucKhoanMuc
        private BizDanhMucKhoanMuc _BizDanhMucKhoanMuc;
        //datarow dùng để lấy dữ liệu và gán dữ liệu
        private DataRow drHeader;

        //// add a delegate
        public delegate void IdentityValues();
        //// add an event of the delegate type
        public event IdentityValues IdentityValue;
        #endregion

        #region contructor

        /// <summary>
        /// User:TAMNN 21/07/2014
        /// Contructor mac dinh
        /// </summary>
        public frmKhoanMuc()
        {
             InitializeComponent();
            _BizDanhMucKhoanMuc = new BizDanhMucKhoanMuc();
             
            try
            {
                this.BeginMode();
                this.NewMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User:TAMNN 21/07/2014
        /// contructor tham số chuyền vào là mã khoản mục
        /// </summary>
        /// <param name="Id"></param>
        public frmKhoanMuc(string Id)
        {
            InitializeComponent();
            _BizDanhMucKhoanMuc = new BizDanhMucKhoanMuc();
            try
            {
                this.BeginMode();
                this.EditMode(Id);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        #endregion

        #region Các Hàm Mode form
        /// <summary>
        /// User:TAMNN ; 21/07/2014
        /// Mục đích: chạy khi bắt đầu vào form
        /// </summary>
        private void BeginMode()
        {
            this.EnableControl(false);
            this.GetCauTrucData();
        }
        /// <summary>
        /// User:TAMNN ; 21/07/2014
        /// Mục đích: chạy khi có mã chứng từ
        /// </summary>
        private void EditMode(string Id)
        {
            isMode = UtilityUIElement.FormMode.EditMode;
            this.EnableControl(true);
            GetDataDanhMucKhoanMucTheoMa(Id);
            if (dsData.Tables.Contains("dt_Module") && dsData.Tables["dt_Module"].Rows.Count > 0)
            {
                g_Module.DataContext = dsData.Tables["dt_Module"].AsDataView();
            }
            frmElementToControl();
            this.txtTenKhoanMuc.Focus();
        }
        /// <summary>
        /// User:TAMNN ; 21/07/2014
        /// Mục đích: thêm mới form
        /// </summary>
        private void NewMode()
        {
            this.ResetTemp();
            this.isMode = UtilityUIElement.FormMode.NewMode;
            this.EnableControl(true);
            this.dsData.Tables["dt_KhoanMuc"].Rows.Clear();
            this.dsData.Tables["dt_KhoanMuc"].AcceptChanges();
            this.drHeader = this.dsData.Tables["dt_KhoanMuc"].NewRow();
            this.dsData.Tables["dt_KhoanMuc"].Rows.Add(drHeader);
            this.SetDefaulControl();
            this.txtSoKhoanMuc.Focus();
        }
        /// <summary>
        ///  User:TAMNN ; 21/07/2014
        ///  Mục đích: save xong dữ liệu thì gọi để đổ lại dữ liệu cho các controll
        /// </summary>
        private void SaveMode()
        {
            isMode = UtilityUIElement.FormMode.EditMode;
            this.EnableControl(true);
            this.txtTenKhoanMuc.Focus();
            DataTable dt = _BizDanhMucKhoanMuc.ft_GetDataDanhMucKhoanMucTheoMa(txtSoKhoanMuc.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_KhoanMuc";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_KhoanMuc"]);
            this.dsData.Tables.Add(dt);
            drHeader = dsData.Tables["dt_KhoanMuc"].Rows[0];
            this.frmElementToControl();
        }
        #endregion

        #region Event
        /// <summary>
        /// User:TAMNN; 
        /// Cập nhậ dữ liệu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCapNhat_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                string Message = this.CheckDataBeforeSave();
                if (!string.IsNullOrEmpty(Message))
                {
                    MessageBox.Show(Message, "SSPharma");
                    return;
                }
                GetDataBeforeSave();//lấy dữ liệu trước khi lưu
                if (isMode == UtilityUIElement.FormMode.NewMode)//Nếu là thêm mới
                {
                    _BizDanhMucKhoanMuc.fg_InsertDanhMucKhoanMuc(dsData.Tables["dt_KhoanMuc"], UtilityUIElement.Counter.DV.ToString());
                    MessageBox.Show("Thêm thành công!");
                }
                else// ngược lại là cập nhật dữ liệu
                {
                    _BizDanhMucKhoanMuc.fg_UpdateDanhMucKhoanMuc(dsData.Tables["dt_KhoanMuc"]);
                    MessageBox.Show("Cập nhật thành công!");
                }
                this.SaveMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User:TAMNN; 
        /// Nút thoát form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThoat_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                this.IdentityValue();
                this.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User: TAMNN
        /// Thoát form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Closed(object sender, System.EventArgs e)
        {
            try
            {
                this.IdentityValue();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User: TAMNN 23/07/2014
        /// Mục đích: checked cột chọn module sử dụng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void g_Module_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            try
            {
                DataRowView row = (DataRowView)g_Module.SelectedItems[0];
                int index = g_Module.CurrentCell.Column.DisplayIndex;
                if (index == 0)
                    row["Choose"] = "True";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        /// <summary>
        /// User: TAMNN 23/07/2014
        /// Mục đích: chọn tất cả
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chkCheckAll_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (chkCheckAll.IsChecked == true)
            {
                foreach (DataRow row in dsData.Tables["dt_Module"].Rows)
                {
                    row["Choose"] = "True";
                }
            }
            else
            {
                foreach (DataRow row in dsData.Tables["dt_Module"].Rows)
                {
                    row["Choose"] = "False";
                }
            }
        }

        #endregion

        #region Utility function
        /// <summary>
        /// lấy cấu trúc table trong sql để thực hiện thêm, xóa, sửa dữ liệu
        /// </summary>
        private void GetCauTrucData()
        {
            dsData = _BizDanhMucKhoanMuc.fs_LayCauTrucTable();
            cboLoaiTien.ItemsSource = _BizDanhMucKhoanMuc.fl_DSDanhMuc_LoaiTien();
        }
        /// <summary>
        /// User: TAMNN 21/07/2014
        /// lấy dữ liệu trước khi lưu
        /// </summary>
        private void GetDataBeforeSave()
        {
            txtSTT.Text = string.IsNullOrEmpty(txtSTT.Text) ? "1" : txtSTT.Text;
            UtilityUIElement.ControlToElement(ref this.drHeader, this.LayoutRoot.Children);
            string Module = string.Empty;
            foreach (DataRow row in dsData.Tables["dt_Module"].Rows)
            {
                if (!string.IsNullOrEmpty(row["Choose"].ToString()) && row["Choose"].ToString() == "True")
                    Module += row["Module"] + "/";
            }
            Module = !string.IsNullOrEmpty(Module) ? Module.Substring(0, Module.Length - 1) : "";
            drHeader["Module"] = Module;
            drHeader["LoaiTien"] = cboLoaiTien.SelectedValue;
            drHeader["ModifiedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYHHMMSSToYYYYMMDDHHMMSS(LibraryFormatConverter.SetStringDateTimeDefault);
            drHeader["ModifiedBy"] = Global.UserName;
            if (this.isMode == UtilityUIElement.FormMode.NewMode)
            {
                drHeader["CreatedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYHHMMSSToYYYYMMDDHHMMSS(LibraryFormatConverter.SetStringDateTimeDefault);
                drHeader["CreatedBy"] = Global.UserName;
                this.dsData.Tables["dt_KhoanMuc"].Rows[0].AcceptChanges();// chuyển trạng thái về Unchange
                this.dsData.Tables["dt_KhoanMuc"].Rows[0].SetAdded();// set lai trang thai la Added
            }
        }
        /// <summary>
        /// User: TAMNN 21/07/2014
        /// Lấy khoản mục theo mã khoản mục
        /// </summary>
        /// <param name="strMa"></param>
        private void GetDataDanhMucKhoanMucTheoMa(string strMa)
        {
            DataTable TableData = _BizDanhMucKhoanMuc.ft_GetDataDanhMucKhoanMucTheoMa(strMa);// lấy dữ liệu theo mã
            TableData.TableName = "dt_KhoanMuc";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_KhoanMuc"]);
            this.dsData.Tables.Add(TableData);
            drHeader = dsData.Tables["dt_KhoanMuc"].Rows[0];
           
        }
        /// <summary>
        /// User: TAMNN 21/07/2014
        /// xóa toàn bộ dữ liệu trên các controll
        /// </summary>
        private void ResetTemp()
        {
            UtilityUIElement.BlankControlText(this.LayoutRoot.Children);
        }
        /// <summary>
        /// User: TAMNN 21/07/2014
        /// kiểm tra các cột bắt buộc và các cột tính toán đúng hay sai.
        /// </summary>
        /// <returns></returns>
        private string CheckDataBeforeSave()
        {
            string str = "";
            if (string.IsNullOrEmpty(txtTenKhoanMuc.Text))
            {
                str = str + "Nhập Tên khoản mục" + "\n";
            }
            return str;
        }
        /// <summary>
        /// User: TAMNN 21/07/2014
        /// ẩn hiện controll
        /// </summary>
        /// <param name="isEnable"></param>
        private void EnableControl(bool isEnable)
        {
            UtilityUIElement.Enable_Control(isEnable, this.LayoutRoot.Children);
            if(isMode == UtilityUIElement.FormMode.EditMode) 
                txtSoKhoanMuc.IsEnabled = false;
        }
        /// <summary>
        /// User: TAMNN 21/07/2014
        /// gán các giá trị mặc định cho các controll
        /// </summary>
        private void SetDefaulControl()
        {
            if (dsData.Tables.Contains("dt_Module") && dsData.Tables["dt_Module"].Rows.Count > 0)
            {
                g_Module.DataContext = dsData.Tables["dt_Module"].AsDataView();
            }
            cboLoaiTien.ItemsSource = _BizDanhMucKhoanMuc.fl_DSDanhMuc_LoaiTien();
            cboLoaiTien.SelectedValue = "VND";
            chkDangSuDung.IsChecked = true;
            chkADChoCapCon.IsChecked = true;
        }
        private void frmElementToControl()
        {
            UtilityUIElement.ElementToControl(drHeader, this.LayoutRoot.Children);
            if (!string.IsNullOrEmpty(drHeader["Module"].ToString()))
            {
                string[] arr = drHeader["Module"].ToString().Split('/');
                foreach (DataRow row in dsData.Tables["dt_Module"].Rows)
                {
                    if (arr.Any(x => row["Module"].ToString().Contains(x)))
                        row["Choose"] = "True";
                }
            }
            cboLoaiTien.SelectedValue = drHeader["LoaiTien"].ToString();
        }
        #endregion
      
        #region Tính toán
        
        #endregion
    }
}
